#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char const *argv[])
{
    char *s1 = "www.yueqian.com.cn";
    //              ↑
    //              p
    char *p;
    if((p=strstr(s1, "yueqian")) != NULL)
        printf("%s\n", p);

    char s2[] = "abc";
    int len = strlen(s2); // 3，计算数组中字符串的长度，不含\0
    int siz = sizeof(s2); // 4，计算数组的容量，跟内容无关
    printf("len: %d\n", len);
    printf("siz: %d\n", siz);

    char *s3 = malloc(20);
    strcpy(s3, "www.yueqian,com cn");
    //          ↑
    //              ↑
    //                      ↑
    char *k = strtok(s3, "., "); // 改函数会直接修改实参
    while(k != NULL)
    {
        printf("%s\n", k); // "www" "yueqian"  "com"  "cn"
        k = strtok(NULL, ",. ");
    }

    printf("s3: %s\n", s3); 
    printf("s3: %s\n", s3+4); 

    // 字符串复制
    char s4[5];
    char s5[10] = "012345678";
    bzero(s4, sizeof(s4));
    strcpy(s4, s5); // s4 <-- s5
    printf("s4: %s\n", s4);
    printf("s5: %s\n", s5);

    bzero(s4, sizeof(s4));
    strncpy(s4, s5, sizeof(s4)-1); // s4 <-- s5 （安全版本）
    printf("s4: %s\n", s4);
    printf("s5: %s\n", s5);


    int a[3];
    int b[3] = {1,2,3};
    // strcpy(a, b);    // 错误的！strcpy只能复制字符串，即char型数据
    memcpy(a, b, 12);// 正确的！memcpy可以复制任意数据的内存


    // 字符串拼接
    char s6[10] = "apple";
    char s7[20] = "0123456789012345678";
    // strcat(s6, s7);  // s6后面拼接上s7
    strncat(s6, s7, sizeof(s6)-strlen(s6)-1); // 安全版本
    printf("s6: %s\n", s6); // "appletree"
    printf("s7: %s\n", s7); // "tree"


    char s8[] = "abc";
    char s9[] = "aBc";
    
    // 直接比较，比较的是地址，而不是字符串的内容
    if(s8 == s9)  // 数组会被系统自动转化为指向首元素的指针
        printf("相等\n");
    else
        printf("不相等\n");

    // 比较字符串的内容
    if(strcmp(s8, s9) == 0)
        printf("相同\n");
    else
        printf("不相同\n");

    // 比较字符串前n个字节的内容
    if(strncmp(s8, s9, 1) == 0)
        printf("相同\n");
    else
        printf("不相同\n");

    
    char *s = "abxxxbwwwww";
    if((k=strchr(s, 'b')) != NULL) // 从左往右找
        printf("%s\n", k); // "bxxxbwwwww"
    else
        printf("查无此人\n");

    if((k=strrchr(s, 'b')) != NULL) // 从右往左找
        printf("%s\n", k); // "bwwwww"
    else
        printf("查无此人\n");

    return 0;
}
